package org.pager.controller;

import org.pager.dao.UserInfoDao;
import org.pager.dao.impl.UserInfoDaoImpl;
import org.pager.entity.UserInfo;
import org.pager.utils.PagerUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 实现分页查询用户信息
 *
 * @author zqx
 * @date 2024-06-07
 */
@WebServlet("/queryByPagerUtil.do")
public class QueryUserByPageUtilServlet extends HttpServlet {

    /**
     * 每页记录数
     */
    private static final int PAGE_SIZE = 4 ;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 第一：获取分页参数 - 进行合法性验证
        String cpStr = req.getParameter("cp");
        int currentPage = 1 ;

        if(cpStr!=null && cpStr.matches("\\d{1,}")) {
            currentPage = Integer.parseInt(cpStr);
        }

        // 第二：调用DAO查询数据
        UserInfoDao dao = new UserInfoDaoImpl() ;
        long totalRecordCount = dao.selectCount();

        // 实例化分页工具类对象 - 封装相关的分页信息
        // 1.初始化分页工具类
        PagerUtil<UserInfo> pagerUtil = new PagerUtil<>();
        pagerUtil.setPageCount(PAGE_SIZE);
        pagerUtil.setTotalRecordCount(totalRecordCount);
        pagerUtil.setCurrentPage(currentPage);

        // 2.查询当前页的数据，并封装到分页工具类中
        List<UserInfo> list = dao.selectByPage((int)pagerUtil.getCurrentPage(), PAGE_SIZE);
        pagerUtil.setData(list);

        // 第三：把 PagerUtil 存储在请求作用域对象中 - 此时，PagerUtil 包含了相关的分页信息了
        req.setAttribute("pageUtil",pagerUtil);

        // 第四：转发到 JSP 页面中 -  JSTL + EL 遍历数据
        req.getRequestDispatcher("userlist-util.jsp").forward(req,resp);
    }
}
